#include<graphics.h>
#include<conio.h> 
#include<windows.h>
#include<stdio.h>
#pragma comment (lib,"Winmm.lib")
/*前y后x
小方块和按钮的图片输出在条件设置数组之后*/
int i,j,step=50;
int win=0;//过关
int player[10][10];//小方块和按钮图片输出数组
/*每次移动大小step=50
   原值都为0，即无物
   数组值为1时，输出小方块图片
   数组值为2时，输出按钮图片
   3为按钮和方块*/
int judge;//用于传送阵
int condit[10][10];//其他条件设置数组
/*每个step50
   1是未升起小旗，2为升起小旗
   3为关上小门，4为打开小门
   5为未按下按钮，6为按下的按钮
   7为遮住的墙，8为未遮住的墙
   11为关上的竖着的门，12为不关上的竖着的门
   n为传送阵1号（1），n+1为传送阵1号（2）
   传送阵以此类推
*/

//函数外全局变量定义 
//定义背景，方向键,方块

IMAGE img_bk,img_block,img_direction_a,img_direction_w,img_direction_s,img_direction_d,img_flag,img_flag1;
IMAGE img_final_flag,img_final_flag1; 
IMAGE img_wall1,img_wall2;
IMAGE img_button1,img_button2;
IMAGE img_transport;
IMAGE img_door1open,img_door1close,img_door2open,img_door2close;

int block_x,block_y;//方块位置
int plx,ply;//方块xy数组值
int w_x,w_y,a_x,a_y,s_x,s_y,d_x,d_y;// 方向键位置

int flag_x,flag_y;  //旗子位置,非数组版

int returnw, returna, returns, returnd;  //判断方向键是否在按钮上

void  startup()//数据初始化 ,位于每一关前面
{	
	mciSendString("open .//music/background.mp3 alias bkmusic",NULL,0,NULL);//背景音乐
	mciSendString("play bkmusic repeat",NULL,0,NULL);// 循环播放
	
	initgraph(800,600);
	//读取图片
	loadimage(&img_bk,".//images/真实的地板无注释版.PNG");   //背景
	loadimage(&img_block,".//images/方块1.0.PNG");   //方块
	loadimage(&img_direction_w,".//images/完成W1.0.PNG");  //方向键w
	loadimage(&img_direction_a,".//images/完成A1.0.PNG");  //方向键a
	loadimage(&img_direction_s,".//images/完成S1.0.PNG");  //方向键s
	loadimage(&img_direction_d,".//images/完成D1.0.PNG");  //方向键d
	loadimage(&img_flag,".//images/旗子目的地1.0.PNG");	 //旗子	

	loadimage(&img_final_flag,".//images/升起的旗子目的地1.0.PNG");	 //升起旗子	

	loadimage(&img_wall1,".//images/遮住的墙.PNG");          //遮住的墙  7 
    loadimage(&img_wall2,".//images/墙.PNG");             //墙8
	loadimage(&img_button1,".//images/无背景按钮（未按下）1.0.PNG");          //未按下的按钮 
	loadimage(&img_button2,".//images/无背景按钮（按下）1.0.PNG");          //按下的按钮
	loadimage(&img_transport,".//images/传送阵.PNG");        // 传送阵

	loadimage(&img_door1open,".//images/栏打开1.0.PNG");     //门打开

	loadimage(&img_door1close,".//images/栏杆关上1.0.PNG");     //门关上

	loadimage(&img_door2open,".//images/竖着打开的栏杆.PNG");     //门打开12
	loadimage(&img_door2close,".//images/竖着的关上的栏杆.PNG");     //门关上11
	
	for(i=0;i<10;i++)//condit所有清零,player清零
	{
		for(j=0;j<10;j++)
		{
			condit[i][j]=0;
		    player[i][j]=0;
		}
	}
	// 地图外各方向键位置
	w_x=650;
	w_y=100; 
	returnw=1;

	a_x=600;
	a_y=150;
	returna=1;

	s_x=650;
	s_y=200;
	returns=1;

	d_x=700;
	d_y=150;
	returnd=1;
	
	judge=1;//传送阵初始判定
}

void show()      //显示画面 
{	
	putimage(0,0,&img_bk);// 在坐标（0,0）处显示background

	for(i=0;i<10;i++)//全场巡逻式放图
	{
		for(j=0;j<10;j++)
		{
			//按钮
			if(condit[i][j]==5)
				putimage(25+j*50,75+i*50,&img_button1); 
	    	else if(condit[i][j]==6)
				putimage(25+j*50,75+i*50,&img_button2);
			//小旗
			else if(condit[i][j]==1)
			{
                putimage(27+j*50,78+i*50,&img_flag);   //旗子   
			}
			else if(condit[i][j]==2)
			{
				putimage(27+j*50,78+i*50,&img_final_flag);   //升起的旗子
			}
			else if(condit[i][j]==9)
			{
				putimage(27+j*50,78+i*50,&img_transport);   //传送阵
			}
			//栏杆
			else if(condit[i][j]==3)
			{
				putimage(25+j*50,83+i*50,&img_door1close);   //关上的门
			}
			else if(condit[i][j]==4)
			{
				putimage(25+j*50,83+i*50,&img_door1open);   //打开的门
			}
			
			else if(condit[i][j]==11)
			{
				putimage(45+j*50,75+i*50,&img_door2close);   //关上的门
			}
			else if(condit[i][j]==12)
			{
				putimage(45+j*50,75+i*50,&img_door2open);   //打开的门
			}
		
		}
	}

	putimage(w_x,w_y,&img_direction_w);  // 方向键w
	putimage(a_x,a_y,&img_direction_a);  //方向键a
	putimage(s_x,s_y,&img_direction_s);  //方向键s
	putimage(d_x,d_y,&img_direction_d);  //方向键d

	//putimage(25,125,&img_transport);   // 测试传送阵

	putimage(block_x,block_y,&img_block); // 方块

	for(i=0;i<10;i++)//全场巡逻式放图
	{
		for(j=0;j<10;j++)
		{
			//围墙
			if(condit[i][j]==7)
				putimage(25+j*50,55+i*50,&img_wall1);
			else if(condit[i][j]==8)
				putimage(25+j*50,55+i*50,&img_wall2);
		}
	}
	//putimage(25,105,&img_wall1);                              //墙
	//putimage(25,55,&img_wall2);                               //遮住的墙
	
	FlushBatchDraw();
}
void updateWithoutInput()      //与用户输入无关的更新 
{
    block_x=34+(50*plx);
	block_y=80+(50*ply);//方块坐标更新
}
//第一关
void rank1_startup()//第一关初始化
{	
	plx=0;
	ply=0;
	player[ply][plx]=1;//方块初始位置
    // 旗子初始位置
	flag_x=478;
	flag_y=76;
    condit[0][9]=1;//小旗落下
	condit[4][4]=5;//未按下的按钮

	//ce's测试用传送阵
	//condit[2][2]=9;
	//condit[9][9]=9;
}

void rank1_judge()//第一关判定
{
	if(player[4][4]>=1 )
		condit[4][4]=6;//按钮按下
	else 
		condit[4][4]=5;//按钮未按下

	if(condit[4][4]==6)//按钮按下，小旗升起
	{
		condit[0][9]=2;
		//小旗升起的音效
		mciSendString("close jpmusic",NULL,0,NULL); //先把前面一次的音乐关闭
		mciSendString("open .//music/Duang2.mp3 alias jpmusic",NULL,0,NULL);//打开弹跳音效
		mciSendString("play jpmusic",NULL,0,NULL);//仅播放一次
	}
		
	else if(condit[4][4]==5)//按钮未按下，小旗落下
		condit[0][9]=1;
    
	/*//传送阵测试！,成功
	if(player[9][9]==1 && judge==1)
	{
		player[9][9]=0;
		plx=2;
		ply=2;
		player[2][2]=1;
		judge=0;
	}
	else if(player[2][2]==1 && judge==1)
	{
		player[2][2]=0;
		plx=9;
		ply=9;
		player[9][9]=1;
		judge=0;
	}
	
	if(player[9][9]!=1 && judge==0 && player[2][2]!=1)//出了传送阵之后才能再进
		judge=1;*/
	
	//过关
	if((player[0][9]==1) && (condit[0][9]==2))
		win=1;
         
}

//第二关
void rank2_startup()//第二关初始化
{
	//过了第一关的初始化
	//exit(0); //测试
	plx=8;
	ply=8;
	block_x=34+50*plx;
	block_y=80+50*ply;
	player[ply][plx]=1;//方块初始位置

	condit[1][1]=5;//按钮位置

	for(i=0;i<2;i++)//围墙(被遮住)
		{
			condit[i][3]=7;
			condit[i][5]=7;
		}
		condit[2][3]=8;
		condit[2][4]=8;
		condit[2][5]=8;
	for(j=2;j<10;j++)//围墙（没被遮住）
			condit[6][j]=8;
}
void rank2_judge()//第二关判定
{
	if(player[1][1]>=1)//按钮按下
		condit[1][1]=6;
	else
		condit[1][1]=5;

	if(condit[1][1]==6)//按钮被按下状态
	{
		condit[0][9]=2;//小旗升起
		mciSendString("close jpmusic",NULL,0,NULL); //先把前面一次的音乐关闭
		mciSendString("open .//music/Duang2.mp3 alias jpmusic",NULL,0,NULL);//打开弹跳音效
		mciSendString("play jpmusic",NULL,0,NULL);//仅播放一次
	}
		
	else
		condit[0][9]=1;//小旗落下

	//过关
	if(condit[0][9]==2 && player[0][9]==1)
		win=2;
}

//第三关
void rank3_startup()//第3关初始化
{
	plx=4;
    ply=4;//小方块初始坐标
    condit[1][1]=5;//按钮1，控制左门
    condit[8][1]=5;//按钮2，控制小旗
    condit[8][8]=5;//按钮三，控制下门
    condit[1][8]=8;//一堵没被遮住的墙
    condit[0][8]=11;//左边的门，关闭
    condit[1][9]=3;//下边的门，关闭
    //小旗依旧位于[0][9]
}
void rank3_judge()//第3关判定
{
	if(player[1][1]>=1)//按钮1，控制左门
        condit[1][1]=6;
    else
        condit[1][1]=5;
    
	if(condit[1][1]==6)
        condit[0][8]=12;//左边的门打开
    else if(condit[1][1]==5)
        condit[0][8]=11;//左边的门，关闭
   
    if(player[8][1]>=1)//按钮2，控制小旗
        condit[8][1]=6;
    else
        condit[8][1]=5;
    //按钮和小旗
	if(condit[8][1]==6)//按钮按下，小旗升起
	{
		condit[0][9]=2;
		mciSendString("close jpmusic",NULL,0,NULL); //先把前面一次的音乐关闭
		mciSendString("open .//music/Duang2.mp3 alias jpmusic",NULL,0,NULL);//打开弹跳音效
		mciSendString("play jpmusic",NULL,0,NULL);//仅播放一次
	}
	    
    else if(condit[8][1]==5)//按钮未按下，小旗落下
	    condit[0][9]=1;
    
    if(player[8][8]>=1)//按钮三，控制下门
        condit[8][8]=6;
    else
        condit[8][8]=5;
    //按钮和下边门
	if(condit[8][8]==6)
        condit[1][9]=4;//下边的门打开
    else if(condit[8][8]==5)
        condit[1][9]=3;//下边的门，关闭

    if(condit[0][9]==2 && player[0][9]==1)
        win=3;//第三关过了
}

//第四关
void rank4_startup()
{
	plx=1;
	ply=4;
	condit[0][4]=8;
	condit[0][6]=8;
	condit[2][4]=8;
	condit[2][6]=8;
	for(i=7;i<9;i++)
	{
		condit[i][4]=7;
		condit[i][6]=7;
	}
	condit[9][4]=8;
	condit[9][6]=8;//墙壁
	
	condit[2][5]=3;
	condit[7][5]=3;// 横着的门
	condit[1][4]=11;
	condit[1][6]=11;//竖着的门
	
	
	condit[1][9]=1;//小旗
	condit[8][1]=5;
	condit[8][5]=5;
	condit[1][5]=5;//按钮
}
void rank4_judge()//第四关判定
{
	if(player[8][1]>0)
		condit[8][1]=6;
	else
		condit[8][1]=5;
	if(condit[8][1]==6)//按钮打开，上面三个小门开
	{
		condit[1][4]=12;
		condit[1][6]=12;
		condit[2][5]=4;
	}
	else//关门
	{
		condit[1][4]=11;
		condit[1][6]=11;
		condit[2][5]=3;
	}

	if(player[1][5]>0)
		condit[1][5]=6;
	else
		condit[1][5]=5;
	if(condit[1][5]==6)//下边的门打开
		condit[7][5]=4;
	else
		condit[7][5]=3;//关门

	if(player[8][5]>0)
		condit[8][5]=6;
	else
		condit[8][5]=5;
	if(condit[8][5]==6)//按钮按下，小旗升起
	{
		condit[1][9]=2;
		mciSendString("close jpmusic",NULL,0,NULL); //先把前面一次的音乐关闭
		mciSendString("open .//music/Duang2.mp3 alias jpmusic",NULL,0,NULL);//打开弹跳音效
		mciSendString("play jpmusic",NULL,0,NULL);//仅播放一次
	}
		
	else 
		condit[1][9]=1;

	if(condit[1][9]==2 && player[1][9]==1)
		win=4;
}

//第五关
void rank5_startup()
{
	plx=2;
	ply=2;
	player[ply][plx]=1;//方块初始位置
	//两个按钮一起按下，小旗升起
	condit[1][1]=5;
	condit[5][1]=5;//两个按钮
	condit[4][5]=1;//小旗
	//传送阵
	condit[1][8]=9;
	condit[7][1]=9;
	for(j=4;j<7;j++)
		condit[5][j]=8;
	condit[3][5]=8;
	condit[3][6]=8;
	condit[3][4]=7;
	condit[4][4]=7;//是围墙
}
void rank5_judge()//第五关的相关判定
{
	if(player[1][1]>0)//上面有东西
		condit[1][1]=6;
	else
	    condit[1][1]=5;//按钮1号按下规定
	if(player[5][1]>0)//上面有东西
		condit[5][1]=6;
	else
		condit[5][1]=5;//按钮二号按下规定

	if(condit[1][1]==6 && condit[5][1]==6)//两个按钮都按下才过关
		condit[4][5]=2;
	else
	{
		condit[4][5]=1;//小旗升起设定
		mciSendString("close jpmusic",NULL,0,NULL); //先把前面一次的音乐关闭
		mciSendString("open .//music/Duang2.mp3 alias jpmusic",NULL,0,NULL);//打开弹跳音效
		mciSendString("play jpmusic",NULL,0,NULL);//仅播放一次
	}
	//传送设定
	if(player[1][8]==1 && judge==1)
	{
		player[1][8]=0;
		plx=1;
		ply=7;
		player[7][1]=1;
		judge=0;
	}
	else if(player[7][1]==1 && judge==1)
	{
		player[7][1]=0;
		plx=8;
		ply=1;
		player[1][8]=1;
		judge=0;
	}
	
	if(player[1][8]!=1 && judge==0 && player[7][1]!=1)//出了传送阵之后才能再进
		judge=1;

	if(condit[4][5]==2 && player[4][5]==1)
		win=5;
}
//第六关
void rank6_startup()//第六关总体初始化
{
	plx=2;
	ply=3;
	player[ply][plx]=1;//小方块位置初始化
	//墙壁位置初始化
	for(i=6;i<9;i=i+2)
	{
		for(j=0;j<4;j++)
			condit[i][j]=8;
	}
	for(j=2;j<8;j++)
		condit[1][j]=8;
	condit[0][2]=7;
	condit[0][7]=7;
	condit[4][8]=7;
	condit[5][8]=7;
	condit[6][8]=8;
	condit[6][9]=8;
	//小旗位置
	condit[5][9]=1;
	//按钮位置
	condit[7][5]=5;//开里面小门
	condit[7][6]=5;//开外面小门
	condit[0][3]=5;//小旗升降按钮
	//小门位置
	condit[7][2]=11;//里面小门
	condit[7][3]=11;//外面小门
	//传送位
	condit[7][0]=9;
	condit[0][6]=9;
}
void rank6_judge()//第六关判定
{
	if(player[7][5]>0)//按钮和里面的门
		condit[7][2]=12;
	else
		condit[7][2]=11;
	
	if(player[7][6]>0)//按钮和外面的门
		condit[7][3]=12;
	else
		condit[7][3]=11;

	//按钮和小旗
	if(player[0][3]>0)
		condit[5][9]=2;//小旗未升起
	else
	{
		condit[5][9]=1;//升起小旗

	}
	//传送
	if(player[7][0]==1 && judge==1)
	{
		player[7][0]=0;
		plx=6;
		ply=0;
		player[0][6]=1;
		judge=0;
	}
	else if(player[0][6]==1 && judge==1)
	{
		player[0][6]=0;
		plx=0;
		ply=7;
		player[7][0]=1;
		judge=0;
	}
	
	if(player[7][0]!=1 && judge==0 && player[0][6]!=1)//出了传送阵之后才能再进
		judge=1;

	if(condit[5][9]==2 && player[5][9]==1)
		win=6;
}

//第七关
void rank7_startup()//第七关的初始化
{
	plx=2;
	ply=0;
	player[ply][plx]=1;//小方块初始化
	//围墙
	for(i=2;i<=4;i=i+2)
	{
		for(j=1;i<=3;j++)
			condit[i][j]=8;
	}
	condit[2][1]=7;
	condit[3][1]=7;
	//门
	condit[3][3]=3;
	//小旗
	condit[8][7]=1;
	//传送阵
	condit[1][8]=9;
	condit[6][2]=9;
	//按钮
	condit[3][2]=5;
	condit[6][5]=5;
}
void rank7_judge()//第七关判定
{
	if(player[6][5]>0)
		condit[6][5]=6;
	else
		condit[6][5]=5;//按钮被按下
	
	if(player[3][2]>0)
		condit[3][2]=6;
	else
		condit[3][2]=5;

	if(condit[6][5]==6)
		condit[3][3]=4;
	else
		condit[3][3]=3;//按钮按下，小门打开

	if(condit[3][2]==6)
		condit[8][7]=2;
	else
		condit[8][7]=2;//按钮按下，小旗升起
	//传送
	if(player[1][8]==1 && judge==1)
	{
		player[1][8]=0;
		plx=2;
		ply=6;
		player[6][2]=1;
		judge=0;
	}
	else if(player[6][2]==1 && judge==1)
	{
		player[6][2]=0;
		plx=8;
		ply=1;
		player[1][8]=1;
		judge=0;
	}
	
	if(player[1][8]!=1 && judge==0 && player[6][2]!=1)//出了传送阵之后才能再进
		judge=1;
	//过关
	if(condit[8][7]==2 && player[8][7]==1)
		win=7;
}
//第八关！！！结束了啊啊啊啊阿！！！！
void rank8_startup()
{
	plx=5;
	ply=5;
	player[plx][ply]=1;//小方块初始化
	//小旗子
	condit[5][5]=1;
	//按钮
	condit[5][1]=5;
	condit[5][7]=5;
	condit[2][5]=5;
	condit[8][5]=5;
	//传送阵
	condit[8][1]=9;
	condit[2][7]=9;
}
void rank8_judge()
{
	//按钮
	if(player[5][1]>0)
		condit[5][1]=6;
	else
		condit[5][1]=5;
	
	if(player[5][7]>0)
		condit[5][7]=6;
	else
		condit[5][7]=5;
	
	if(player[2][5]>0)
		condit[2][5]=6;
	else
		condit[2][5]=5;

	if(player[8][5]>0)
		condit[8][5]=6;
	else
		condit[8][5]=5;
	//传送
	if(player[8][1]==1 && judge==1)
	{
		player[8][1]=0;
		plx=7;
		ply=2;
		player[2][7]=1;
		judge=0;
	}
	else if(player[2][7]==1 && judge==1)
	{
		player[2][7]=0;
		plx=1;
		ply=8;
		player[8][1]=1;
	    judge=0;
	}
	if(player[8][1]!=1 && judge==0 && player[2][7]!=1)//出了传送阵之后才能再进
		judge=1;
	//过关
	if(condit[5][1]==6 && condit[5][7]==6 && condit[2][5]==6 && condit[8][5]==6)
	{
		condit[5][5]=2;
		win=8;
	}
}
void updateWithInput()     //与用户输入有关的更新，恒成立 
{
	char input;
	if(kbhit())
	{
		input=getch();
	    
		if(input==' ')
		{
			input=getch();
			if(input=='w' && returnw==1) //w
			{
				returnw=0;
				w_x=block_x-9;
				w_y=block_y-7;
				player[ply][plx]=3;//该处剩余小方块和按键
			}
			else if(input=='w' && returnw==0)//w
			{
				returnw=1;
				w_x=650;
				w_y=100;
				player[ply][plx]=1;//该处剩余小方块
			}
            //s
			else if(input=='s' && returns==1)
			{
				returns=0;
				s_x=block_x-9;
				s_y=block_y-7;
				player[ply][plx]=3;//该处剩余小方块和按键
			}
			else if(input=='s' && returns==0)
			{
				returns=1;
				s_x=650;
				s_y=200;
				player[ply][plx]=1;//该处剩余小方块
			}

            else if(input=='a' && returna==1)
			{
				returna=0;
				a_x=block_x-9;
				a_y=block_y-7;
				player[ply][plx]=3;//该处剩余小方块和按键
			}
			else if(input=='a' && returna==0)
			{
				returna=1;
				a_x=600;
				a_y=150;
				player[ply][plx]=1;//该处剩余小方块
			}

			else if(input=='d' && returnd==1)
			{
				returnd=0;
				d_x=block_x-9;
				d_y=block_y-7;
				player[ply][plx]=3;//该处剩余小方块和按键
			}
			else if(input=='d' && returnd==0)
			{
				returnd=1;
				d_x=700;
				d_y=150;
				player[ply][plx]=1;//该处剩余小方块
			}

		}
		else if(input=='w' && returnw==1 && ply>0 && condit[ply-1][plx]!=7 && condit[ply-1][plx]!=8 && condit[ply-1][plx]!=3)
		{	
			if(player[ply][plx]==1)
			    player[ply][plx]=0;//原址变为空白
			else if(player[ply][plx]==3)
				player[ply][plx]=2;//原址变为按键
           
			ply--;//上移

			if(player[ply][plx]==0)//下一步地址为空白
			    player[ply][plx]=1;//变为小方块
			else if(player[ply][plx]==2)//下一步地址有按键
				player[ply][plx]=3;//变为按键和小方块

			mciSendString("close jpmusic",NULL,0,NULL); //先把前面一次的音乐关闭
			mciSendString("open .//music/Duang1.mp3 alias jpmusic",NULL,0,NULL);//打开弹跳音效
			mciSendString("play jpmusic",NULL,0,NULL);//仅播放一次
		}

		else if(input=='s' && returns==1 && ply<9 && condit[ply+1][plx]!=7 && condit[ply+1][plx]!=8 && condit[ply+1][plx]!=3)
		{
			if(player[ply][plx]==1)
			    player[ply][plx]=0;//原址变为空白
			else if(player[ply][plx]==3)
				player[ply][plx]=2;//原址变为按键
           
			ply++;//下移

			if(player[ply][plx]==0)//下一步地址为空白
			    player[ply][plx]=1;//变为小方块
			else if(player[ply][plx]==2)//下一步地址有按键
				player[ply][plx]=3;//变为按键和小方块

			mciSendString("close jpmusic",NULL,0,NULL); //先把前面一次的音乐关闭
			mciSendString("open .//music/Duang1.mp3 alias jpmusic",NULL,0,NULL);//打开弹跳音效
			mciSendString("play jpmusic",NULL,0,NULL);//仅播放一次
		}
		else if(input=='a' && returna==1 && plx>0 && condit[ply][plx-1]!=7 && condit[ply][plx-1]!=8 && condit[ply][plx-1]!=3)
		{   
			if(player[ply][plx]==1)
			    player[ply][plx]=0;//原址变为空白
			else if(player[ply][plx]==3)
				player[ply][plx]=2;//原址变为按键
           
			plx--;//左移

			if(player[ply][plx]==0)//下一步地址为空白
			    player[ply][plx]=1;//变为小方块
			else if(player[ply][plx]==2)//下一步地址有按键
				player[ply][plx]=3;//变为按键和小方块
			mciSendString("close jpmusic",NULL,0,NULL); //先把前面一次的音乐关闭
			mciSendString("open .//music/Duang1.mp3 alias jpmusic",NULL,0,NULL);//打开弹跳音效
			mciSendString("play jpmusic",NULL,0,NULL);//仅播放一次
		}
		else if(input=='d' && returnd==1 && plx<9 && condit[ply][plx+1]!=7 && condit[ply][plx+1]!=8 && condit[ply][plx+1]!=3)
		{
			if(player[ply][plx]==1)
			    player[ply][plx]=0;//原址变为空白
			else if(player[ply][plx]==3)
				player[ply][plx]=2;//原址变为按键
           
			plx++;//右移

			if(player[ply][plx]==0)//下一步地址为空白
			    player[ply][plx]=1;//变为小方块
			else if(player[ply][plx]==2)//下一步地址有按键
				player[ply][plx]=3;//变为按键和小方块
			mciSendString("close jpmusic",NULL,0,NULL); //先把前面一次的音乐关闭
			mciSendString("open .//music/Duang1.mp3 alias jpmusic",NULL,0,NULL);//打开弹跳音效
			mciSendString("play jpmusic",NULL,0,NULL);//仅播放一次
		}

		if(input=='r')//重开
		{
			startup();
			if(win==0)
			{
				startup();
				rank1_startup();
			}
			if(win==1)
			{
				startup();
				rank2_startup();
			}
			if(win==2)
			{
				startup();
				rank3_startup();
			}
			if(win==3)
			{
				startup();
				rank4_startup();
			}
			if(win==4)
			{
				startup();
				rank5_startup();
			}
			if(win==5)
			{
				startup();
				rank6_startup();
			}
			if(win==6)
			{
				startup();
				rank7_startup();
			}
			if(win==7)
			{
				startup();
				rank8_startup();
			}
		}
		//if(input==27)//暴力退出法，指esc
			//exit(0);
	}
}

void gameover()
{
	EndBatchDraw();
	getch();
	closegraph();
}

int main()
{
	startup();         //数据初始化
	rank1_startup();   //1初始
	while(1)           //游戏循坏执行 
	{
		show();       
		updateWithoutInput();  //与用户输入无关的更新 
		updateWithInput();     //与用户输入有关的更新 
		rank1_judge();         //判断

		if(win==1)            //过了第一关跳到第二关
			break;
	}
	//第2关
	startup();         //数据初始化
    rank2_startup();   //2初始
	while(win==1)
	{
		show(); 
		updateWithoutInput();  //与用户输入无关的更新 
		updateWithInput();     //与用户输入有关的更新 
		rank2_judge();         //判断
		if(win==2)            //过了第2关跳到第3关
			break;
	}
	//第三关
	startup();//初始化
	rank3_startup();//第三关初始化
	while(win==2)
	{
		show(); 
		updateWithoutInput();  //与用户输入无关的更新 
		updateWithInput();     //与用户输入有关的更新 
		rank3_judge();         //判断
		if(win==3)            //过了第2关跳到第3关
			break;
	}
	//第四关
	startup();//初始化
	rank4_startup();//第4关初始化
	while(win==3)
	{
		show(); 
		updateWithoutInput();  //与用户输入无关的更新 
		updateWithInput();     //与用户输入有关的更新 
		rank4_judge();         //判断
		if(win==4)            //过了第4关跳到第5关
			break;
	}
	//第五关
	startup();//初始化
	rank5_startup();//第5关初始化
	while(win==4)
	{
		show(); 
		updateWithoutInput();  //与用户输入无关的更新 
		updateWithInput();     //与用户输入有关的更新 
		rank5_judge();         //判断
		if(win==5)            //过了第5关跳到第6关
			break;
	}
	//第6关
	startup();//初始化
	rank6_startup();//第6关初始化
	while(win==5)
	{
		show(); 
		updateWithoutInput();  //与用户输入无关的更新 
		updateWithInput();     //与用户输入有关的更新 
		rank6_judge();         //判断
		if(win==6)            //过了第6关跳到第7关
			break;
	}
	//第7关
	startup();//初始化
	rank7_startup();//第7关初始化
	while(win==6)
	{
		show(); 
		updateWithoutInput();  //与用户输入无关的更新 
		updateWithInput();     //与用户输入有关的更新 
		rank7_judge();         //判断
		if(win==7)            //过了第7关跳到第8关
			break;
	}
	//第8关
	startup();//初始化
	rank8_startup();//第8关初始化
	while(win==7)
	{
		show(); 
		updateWithoutInput();  //与用户输入无关的更新 
		updateWithInput();     //与用户输入有关的更新 
		rank8_judge();         //判断
		if(win==8)            //过了第8关跳出
			break;
	}
    gameover();
	return 0;
} 